#include<stdio.h>
#include<unistd.h>
#include<signal.h>

void show_pending(sigset_t* pending){
  int sig = 1;
  for(;sig<=31;++sig){
    if(sigismember(pending,sig)){
      printf("1");
    }
    else{
      printf("0");
    }
  }
  printf("\n");
}
//自定义信号递达
void sighandler(int sig){
  printf("catch a sig:%d\n",sig);
}




int main(){
  //设置3个信号集，分别为未决信号集，阻塞信号集，备份阻塞信号集
  sigset_t pending;
  sigset_t block,oldblock;
  //初始化阻塞信号集
  sigemptyset(&block);
  sigemptyset(&oldblock);
  //设置信号集2号信号bit位为1
  sigaddset(&block,2);
  //屏蔽(阻塞)2号信号
  sigprocmask(SIG_SETMASK,&block,&oldblock);
  //自定义捕捉2号信号
  signal(2,sighandler);
  

  int count = 0;
  while(1){
    //初始化未决信号集
    sigemptyset(&pending);
    //获取当前进程未决信号集
    sigpending(&pending);
    show_pending(&pending);
    sleep(1);
    count++;
    if(count == 10){
      sigprocmask(SIG_SETMASK,&oldblock,NULL);
      printf("恢复原来阻塞信号集\n");
    }
  }
	return 0;
} 
